<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>数据类型</title>
</head>
<body>
    <script>
        "use strict";
        /*
            Javascript5种基本数据类型
                undefined null boolean number string
            1种复杂数据类型
                object
            
            typeof操作符：用来检测变量的数据类型
            对于一个值使用typeof操作符可能返回下列某个字符串：
                undefined-如果这个值未定义
                boolean-如果这个值是布尔值
                string-如果这个值是字符串
                number-如果这个值是数值
                object-如果这个值是对象或null
                function-如果这个值是函数

            undefined类型：
                这种类型只有一个值，即特殊的undefined。
                在使用var声明变量但未对其加以初始化时，这个变量的值就是undefined

            null类型：
                null类型是第二个只有一个值的数据类型，这个类型的值是null。
                从逻辑来看，null值表示一个空对象的指针，而这也证明使用typeof操作符检测null时会返回object

                如果定义的变量准备在将来用于保存对象，那么最好将该变量初始化为null而不是其他值。
                这样，只要检查是否为null值，就可以知道相应的变量是否已经保存了一个对象

                实际上，undefined的值是派生自null值得，因此ECMA-262规定对他们相等性测试要返回true。
                    console.log(undefined == null); // true
                    console.log(undefined === null); // false

            boolean类型：
                boolean类型是ECMAScript中使用的最多的一种类型，该类型只有两个字面值：true和false
                这两个值与数字值不是一回事，因此true不一定等于数字1，而false也不一定等于数字0

                boolean类型的字面量的值true和false是区分大小写的，也就是说，True和False（以及其他的大小写混合形式）
                都不是boolean的值，只是标识符

                虽然boolean类型的字面量的值只有两个，但是ESMAScript中所有类型的值都有与这两个布尔值等价的值。
                要将一个值转换为一个等价的值，可以调用转型函数Boolean()，

                各种数据类型对应的转型规则：
                    数据类型        转换为true的值              转换为false的值
                    Boolean         true                       false
                    String          任何非空字符串              ""（空字符串）
                    Number          任何非零数字值(包括无穷大)   0和NaN
                    Object          任何对象                    null
                    Undefined       n/a                         undefined

        */
        
    </script>
</body>
</html>